---
title: "v1.2.1 — API Architecture Hardening, Translations Cleanup, and Tailwind v3 Fix"
version: 1.2.1
date: 2025-05-12
description: "Patch release refining the new API architecture with oRPC + OpenAPI, consolidating translations into common keys, fixing Tailwind v3 layer collision, and improving schema validation and configuration defaults. Introduces a type-safe Node.js SDK and centralized routing."
tags:
  - release
  - stable
  - backend
  - openapi
  - translations
  - styling
canary: false
type: release
breaking: false
authors:
  - burnedchris
  - kayleewilliams
packages:
  - "c15t@1.2.1"
---

## Summary

This release delivers a major refactor and architecture upgrade across the API system, along with enhanced translation handling, styling fixes, and groundwork for future CLI and dashboard features. It introduces a type-safe Node.js SDK, centralized routing, and better configuration defaults — paving the way for production-ready scaling.

## 🚀 New Features

- Introduced a **Node.js SDK** for type-safe client access to the C15T API
- Added **OpenAPI** support for backend contracts
- New **contract-based routing** for consent and meta endpoints
- Support for **common translation strings** across UI components
- Early support for **dev vs prod** instance logic and origin handling

## 🐛 Bug Fixes

- Fixed Tailwind CSS v3 layer collision by removing unused `@layer` wrappers
- Improved schema validation for `setConsent`
- Fixed environment variable parsing for trusted origins
- Improved fallback handling for translations and jurisdiction detection

## 🧪 Tests

- Added test coverage for new consent contracts and schema validation
- Extended coverage for translations, error handling, and Node.js SDK
- Cleaned up outdated tests and fixtures

## 🧹 Refactor

- Migrated backend from H3 to **oRPC** for improved type safety
- Consolidated translation logic and **removed widget-specific translations**
- Introduced a **unified logger** utility
- Simplified consent manager configuration and routing structure

## 🔒 Closed Issues

- [#222](https://github.com/c15t/c15t/issues/222) — duplicate/overlapping translation keys between dialog and widget (resolved by consolidation to `common`)
- [#217](https://github.com/c15t/c15t/issues/217) / [#218](https://github.com/c15t/c15t/issues/218) — Tailwind v3 `@layer base` collision (fixed by removing layer wrappers)

## ✨ What's Changed

- refactor(api): switch to oRPC and unified contract routing by [@BurnedChris](https://github.com/BurnedChris) in [#213](https://github.com/c15t/c15t/pull/213)
- feat(sdk): introduce Node.js client with OpenAPI support by [@BurnedChris](https://github.com/BurnedChris) in [#214](https://github.com/c15t/c15t/pull/214)
- fix(styles): remove Tailwind layer to avoid collision by [@KayleeWilliams](https://github.com/KayleeWilliams) in [#217](https://github.com/c15t/c15t/pull/217)
- refactor(translations): consolidate into common + remove widget keys by [@KayleeWilliams](https://github.com/KayleeWilliams) in [#219](https://github.com/c15t/c15t/pull/219)
- fix(schema): improve `setConsent` validation by [@KayleeWilliams](https://github.com/KayleeWilliams)
- Version Packages by [@github-actions](https://github.com/github-actions) in [#220](https://github.com/c15t/c15t/pull/220)

Published via commit [f82e56a](https://github.com/c15t/c15t/commit/f82e56a) by [@github-actions](https://github.com/github-actions)

**Full Changelog**: [c15t@1.2.0...c15t@1.2.1](https://github.com/c15t/c15t/compare/c15t@1.2.0...c15t@1.2.1)

<ContributorBlock usernames={["BurnedChris", "KayleeWilliams"]} />


